// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/*!
 * @file Test.h
 * This header file contains the declaration of the described types in the IDL file.
 *
 * This file was generated by the tool fastddsgen.
 */

#include <fastcdr/config.h>
#include "Testv1.h"

#if FASTCDR_VERSION_MAJOR > 1

#ifndef _FAST_DDS_GENERATED_TEST_H_
#define _FAST_DDS_GENERATED_TEST_H_

#include <array>
#include <bitset>
#include <cstdint>
#include <map>
#include <string>
#include <vector>

#include <fastcdr/cdr/fixed_size_string.hpp>
#include <fastcdr/xcdr/external.hpp>
#include <fastcdr/xcdr/optional.hpp>



#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#define eProsima_user_DllExport __declspec( dllexport )
#else
#define eProsima_user_DllExport
#endif  // EPROSIMA_USER_DLL_EXPORT
#else
#define eProsima_user_DllExport
#endif  // _WIN32

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#if defined(TEST_SOURCE)
#define TEST_DllAPI __declspec( dllexport )
#else
#define TEST_DllAPI __declspec( dllimport )
#endif // TEST_SOURCE
#else
#define TEST_DllAPI
#endif  // EPROSIMA_USER_DLL_EXPORT
#else
#define TEST_DllAPI
#endif // _WIN32

namespace eprosima {
namespace fastcdr {
class Cdr;
class CdrSizeCalculator;
} // namespace fastcdr
} // namespace eprosima



/*!
 * @brief This class represents the enumeration MyEnum defined by the user in the IDL file.
 * @ingroup Test
 */
enum MyEnum : uint32_t
{
    A,
    B,
    C
};
typedef MyEnum MyAliasEnum;

typedef MyAliasEnum MyAliasEnum2;

typedef MyAliasEnum2 MyAliasEnum3;



/*!
 * @brief This class represents the structure BasicStruct defined by the user in the IDL file.
 * @ingroup Test
 */
class BasicStruct
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport BasicStruct();

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~BasicStruct();

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object BasicStruct that will be copied.
     */
    eProsima_user_DllExport BasicStruct(
            const BasicStruct& x);

    /*!
     * @brief Move constructor.
     * @param x Reference to the object BasicStruct that will be copied.
     */
    eProsima_user_DllExport BasicStruct(
            BasicStruct&& x) noexcept;

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object BasicStruct that will be copied.
     */
    eProsima_user_DllExport BasicStruct& operator =(
            const BasicStruct& x);

    /*!
     * @brief Move assignment.
     * @param x Reference to the object BasicStruct that will be copied.
     */
    eProsima_user_DllExport BasicStruct& operator =(
            BasicStruct&& x) noexcept;

    /*!
     * @brief Comparison operator.
     * @param x BasicStruct object to compare.
     */
    eProsima_user_DllExport bool operator ==(
            const BasicStruct& x) const;

    /*!
     * @brief Comparison operator.
     * @param x BasicStruct object to compare.
     */
    eProsima_user_DllExport bool operator !=(
            const BasicStruct& x) const;

    /*!
     * @brief This function sets a value in member my_bool
     * @param _my_bool New value for member my_bool
     */
    eProsima_user_DllExport void my_bool(
            bool _my_bool);

    /*!
     * @brief This function returns the value of member my_bool
     * @return Value of member my_bool
     */
    eProsima_user_DllExport bool my_bool() const;

    /*!
     * @brief This function returns a reference to member my_bool
     * @return Reference to member my_bool
     */
    eProsima_user_DllExport bool& my_bool();


    /*!
     * @brief This function sets a value in member my_octet
     * @param _my_octet New value for member my_octet
     */
    eProsima_user_DllExport void my_octet(
            uint8_t _my_octet);

    /*!
     * @brief This function returns the value of member my_octet
     * @return Value of member my_octet
     */
    eProsima_user_DllExport uint8_t my_octet() const;

    /*!
     * @brief This function returns a reference to member my_octet
     * @return Reference to member my_octet
     */
    eProsima_user_DllExport uint8_t& my_octet();


    /*!
     * @brief This function sets a value in member my_int16
     * @param _my_int16 New value for member my_int16
     */
    eProsima_user_DllExport void my_int16(
            int16_t _my_int16);

    /*!
     * @brief This function returns the value of member my_int16
     * @return Value of member my_int16
     */
    eProsima_user_DllExport int16_t my_int16() const;

    /*!
     * @brief This function returns a reference to member my_int16
     * @return Reference to member my_int16
     */
    eProsima_user_DllExport int16_t& my_int16();


    /*!
     * @brief This function sets a value in member my_int32
     * @param _my_int32 New value for member my_int32
     */
    eProsima_user_DllExport void my_int32(
            int32_t _my_int32);

    /*!
     * @brief This function returns the value of member my_int32
     * @return Value of member my_int32
     */
    eProsima_user_DllExport int32_t my_int32() const;

    /*!
     * @brief This function returns a reference to member my_int32
     * @return Reference to member my_int32
     */
    eProsima_user_DllExport int32_t& my_int32();


    /*!
     * @brief This function sets a value in member my_int64
     * @param _my_int64 New value for member my_int64
     */
    eProsima_user_DllExport void my_int64(
            int64_t _my_int64);

    /*!
     * @brief This function returns the value of member my_int64
     * @return Value of member my_int64
     */
    eProsima_user_DllExport int64_t my_int64() const;

    /*!
     * @brief This function returns a reference to member my_int64
     * @return Reference to member my_int64
     */
    eProsima_user_DllExport int64_t& my_int64();


    /*!
     * @brief This function sets a value in member my_uint16
     * @param _my_uint16 New value for member my_uint16
     */
    eProsima_user_DllExport void my_uint16(
            uint16_t _my_uint16);

    /*!
     * @brief This function returns the value of member my_uint16
     * @return Value of member my_uint16
     */
    eProsima_user_DllExport uint16_t my_uint16() const;

    /*!
     * @brief This function returns a reference to member my_uint16
     * @return Reference to member my_uint16
     */
    eProsima_user_DllExport uint16_t& my_uint16();


    /*!
     * @brief This function sets a value in member my_uint32
     * @param _my_uint32 New value for member my_uint32
     */
    eProsima_user_DllExport void my_uint32(
            uint32_t _my_uint32);

    /*!
     * @brief This function returns the value of member my_uint32
     * @return Value of member my_uint32
     */
    eProsima_user_DllExport uint32_t my_uint32() const;

    /*!
     * @brief This function returns a reference to member my_uint32
     * @return Reference to member my_uint32
     */
    eProsima_user_DllExport uint32_t& my_uint32();


    /*!
     * @brief This function sets a value in member my_uint64
     * @param _my_uint64 New value for member my_uint64
     */
    eProsima_user_DllExport void my_uint64(
            uint64_t _my_uint64);

    /*!
     * @brief This function returns the value of member my_uint64
     * @return Value of member my_uint64
     */
    eProsima_user_DllExport uint64_t my_uint64() const;

    /*!
     * @brief This function returns a reference to member my_uint64
     * @return Reference to member my_uint64
     */
    eProsima_user_DllExport uint64_t& my_uint64();


    /*!
     * @brief This function sets a value in member my_float32
     * @param _my_float32 New value for member my_float32
     */
    eProsima_user_DllExport void my_float32(
            float _my_float32);

    /*!
     * @brief This function returns the value of member my_float32
     * @return Value of member my_float32
     */
    eProsima_user_DllExport float my_float32() const;

    /*!
     * @brief This function returns a reference to member my_float32
     * @return Reference to member my_float32
     */
    eProsima_user_DllExport float& my_float32();


    /*!
     * @brief This function sets a value in member my_float64
     * @param _my_float64 New value for member my_float64
     */
    eProsima_user_DllExport void my_float64(
            double _my_float64);

    /*!
     * @brief This function returns the value of member my_float64
     * @return Value of member my_float64
     */
    eProsima_user_DllExport double my_float64() const;

    /*!
     * @brief This function returns a reference to member my_float64
     * @return Reference to member my_float64
     */
    eProsima_user_DllExport double& my_float64();


    /*!
     * @brief This function sets a value in member my_float128
     * @param _my_float128 New value for member my_float128
     */
    eProsima_user_DllExport void my_float128(
            long double _my_float128);

    /*!
     * @brief This function returns the value of member my_float128
     * @return Value of member my_float128
     */
    eProsima_user_DllExport long double my_float128() const;

    /*!
     * @brief This function returns a reference to member my_float128
     * @return Reference to member my_float128
     */
    eProsima_user_DllExport long double& my_float128();


    /*!
     * @brief This function sets a value in member my_char
     * @param _my_char New value for member my_char
     */
    eProsima_user_DllExport void my_char(
            char _my_char);

    /*!
     * @brief This function returns the value of member my_char
     * @return Value of member my_char
     */
    eProsima_user_DllExport char my_char() const;

    /*!
     * @brief This function returns a reference to member my_char
     * @return Reference to member my_char
     */
    eProsima_user_DllExport char& my_char();


    /*!
     * @brief This function copies the value in member my_string
     * @param _my_string New value to be copied in member my_string
     */
    eProsima_user_DllExport void my_string(
            const std::string& _my_string);

    /*!
     * @brief This function moves the value in member my_string
     * @param _my_string New value to be moved in member my_string
     */
    eProsima_user_DllExport void my_string(
            std::string&& _my_string);

    /*!
     * @brief This function returns a constant reference to member my_string
     * @return Constant reference to member my_string
     */
    eProsima_user_DllExport const std::string& my_string() const;

    /*!
     * @brief This function returns a reference to member my_string
     * @return Reference to member my_string
     */
    eProsima_user_DllExport std::string& my_string();

private:

    bool m_my_bool{false};
    uint8_t m_my_octet{0};
    int16_t m_my_int16{0};
    int32_t m_my_int32{0};
    int64_t m_my_int64{0};
    uint16_t m_my_uint16{0};
    uint32_t m_my_uint32{0};
    uint64_t m_my_uint64{0};
    float m_my_float32{0.0};
    double m_my_float64{0.0};
    long double m_my_float128{0.0};
    char m_my_char{0};
    std::string m_my_string;

};
typedef std::array<uint8_t, 500> MyOctetArray500;

typedef std::array<BasicStruct, 5> BSAlias5;

typedef std::array<MyAliasEnum3, 42> MA3;

typedef std::array<int32_t, 2> MyMiniArray;



typedef std::vector<int32_t> MySequenceLong;



/*!
 * @brief This class represents the structure ComplexStruct defined by the user in the IDL file.
 * @ingroup Test
 */
class ComplexStruct
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport ComplexStruct();

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~ComplexStruct();

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object ComplexStruct that will be copied.
     */
    eProsima_user_DllExport ComplexStruct(
            const ComplexStruct& x);

    /*!
     * @brief Move constructor.
     * @param x Reference to the object ComplexStruct that will be copied.
     */
    eProsima_user_DllExport ComplexStruct(
            ComplexStruct&& x) noexcept;

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object ComplexStruct that will be copied.
     */
    eProsima_user_DllExport ComplexStruct& operator =(
            const ComplexStruct& x);

    /*!
     * @brief Move assignment.
     * @param x Reference to the object ComplexStruct that will be copied.
     */
    eProsima_user_DllExport ComplexStruct& operator =(
            ComplexStruct&& x) noexcept;

    /*!
     * @brief Comparison operator.
     * @param x ComplexStruct object to compare.
     */
    eProsima_user_DllExport bool operator ==(
            const ComplexStruct& x) const;

    /*!
     * @brief Comparison operator.
     * @param x ComplexStruct object to compare.
     */
    eProsima_user_DllExport bool operator !=(
            const ComplexStruct& x) const;

    /*!
     * @brief This function sets a value in member my_octet
     * @param _my_octet New value for member my_octet
     */
    eProsima_user_DllExport void my_octet(
            uint8_t _my_octet);

    /*!
     * @brief This function returns the value of member my_octet
     * @return Value of member my_octet
     */
    eProsima_user_DllExport uint8_t my_octet() const;

    /*!
     * @brief This function returns a reference to member my_octet
     * @return Reference to member my_octet
     */
    eProsima_user_DllExport uint8_t& my_octet();


    /*!
     * @brief This function copies the value in member my_basic_struct
     * @param _my_basic_struct New value to be copied in member my_basic_struct
     */
    eProsima_user_DllExport void my_basic_struct(
            const BasicStruct& _my_basic_struct);

    /*!
     * @brief This function moves the value in member my_basic_struct
     * @param _my_basic_struct New value to be moved in member my_basic_struct
     */
    eProsima_user_DllExport void my_basic_struct(
            BasicStruct&& _my_basic_struct);

    /*!
     * @brief This function returns a constant reference to member my_basic_struct
     * @return Constant reference to member my_basic_struct
     */
    eProsima_user_DllExport const BasicStruct& my_basic_struct() const;

    /*!
     * @brief This function returns a reference to member my_basic_struct
     * @return Reference to member my_basic_struct
     */
    eProsima_user_DllExport BasicStruct& my_basic_struct();


    /*!
     * @brief This function sets a value in member my_alias_enum
     * @param _my_alias_enum New value for member my_alias_enum
     */
    eProsima_user_DllExport void my_alias_enum(
            MyAliasEnum _my_alias_enum);

    /*!
     * @brief This function returns the value of member my_alias_enum
     * @return Value of member my_alias_enum
     */
    eProsima_user_DllExport MyAliasEnum my_alias_enum() const;

    /*!
     * @brief This function returns a reference to member my_alias_enum
     * @return Reference to member my_alias_enum
     */
    eProsima_user_DllExport MyAliasEnum& my_alias_enum();


    /*!
     * @brief This function sets a value in member my_enum
     * @param _my_enum New value for member my_enum
     */
    eProsima_user_DllExport void my_enum(
            MyEnum _my_enum);

    /*!
     * @brief This function returns the value of member my_enum
     * @return Value of member my_enum
     */
    eProsima_user_DllExport MyEnum my_enum() const;

    /*!
     * @brief This function returns a reference to member my_enum
     * @return Reference to member my_enum
     */
    eProsima_user_DllExport MyEnum& my_enum();


    /*!
     * @brief This function copies the value in member my_sequence_octet
     * @param _my_sequence_octet New value to be copied in member my_sequence_octet
     */
    eProsima_user_DllExport void my_sequence_octet(
            const std::vector<uint8_t>& _my_sequence_octet);

    /*!
     * @brief This function moves the value in member my_sequence_octet
     * @param _my_sequence_octet New value to be moved in member my_sequence_octet
     */
    eProsima_user_DllExport void my_sequence_octet(
            std::vector<uint8_t>&& _my_sequence_octet);

    /*!
     * @brief This function returns a constant reference to member my_sequence_octet
     * @return Constant reference to member my_sequence_octet
     */
    eProsima_user_DllExport const std::vector<uint8_t>& my_sequence_octet() const;

    /*!
     * @brief This function returns a reference to member my_sequence_octet
     * @return Reference to member my_sequence_octet
     */
    eProsima_user_DllExport std::vector<uint8_t>& my_sequence_octet();


    /*!
     * @brief This function copies the value in member my_sequence_struct
     * @param _my_sequence_struct New value to be copied in member my_sequence_struct
     */
    eProsima_user_DllExport void my_sequence_struct(
            const std::vector<BasicStruct>& _my_sequence_struct);

    /*!
     * @brief This function moves the value in member my_sequence_struct
     * @param _my_sequence_struct New value to be moved in member my_sequence_struct
     */
    eProsima_user_DllExport void my_sequence_struct(
            std::vector<BasicStruct>&& _my_sequence_struct);

    /*!
     * @brief This function returns a constant reference to member my_sequence_struct
     * @return Constant reference to member my_sequence_struct
     */
    eProsima_user_DllExport const std::vector<BasicStruct>& my_sequence_struct() const;

    /*!
     * @brief This function returns a reference to member my_sequence_struct
     * @return Reference to member my_sequence_struct
     */
    eProsima_user_DllExport std::vector<BasicStruct>& my_sequence_struct();


    /*!
     * @brief This function copies the value in member my_array_octet
     * @param _my_array_octet New value to be copied in member my_array_octet
     */
    eProsima_user_DllExport void my_array_octet(
            const std::array<std::array<std::array<char, 4>, 5>, 500>& _my_array_octet);

    /*!
     * @brief This function moves the value in member my_array_octet
     * @param _my_array_octet New value to be moved in member my_array_octet
     */
    eProsima_user_DllExport void my_array_octet(
            std::array<std::array<std::array<char, 4>, 5>, 500>&& _my_array_octet);

    /*!
     * @brief This function returns a constant reference to member my_array_octet
     * @return Constant reference to member my_array_octet
     */
    eProsima_user_DllExport const std::array<std::array<std::array<char, 4>, 5>, 500>& my_array_octet() const;

    /*!
     * @brief This function returns a reference to member my_array_octet
     * @return Reference to member my_array_octet
     */
    eProsima_user_DllExport std::array<std::array<std::array<char, 4>, 5>, 500>& my_array_octet();


    /*!
     * @brief This function copies the value in member my_octet_array_500
     * @param _my_octet_array_500 New value to be copied in member my_octet_array_500
     */
    eProsima_user_DllExport void my_octet_array_500(
            const MyOctetArray500& _my_octet_array_500);

    /*!
     * @brief This function moves the value in member my_octet_array_500
     * @param _my_octet_array_500 New value to be moved in member my_octet_array_500
     */
    eProsima_user_DllExport void my_octet_array_500(
            MyOctetArray500&& _my_octet_array_500);

    /*!
     * @brief This function returns a constant reference to member my_octet_array_500
     * @return Constant reference to member my_octet_array_500
     */
    eProsima_user_DllExport const MyOctetArray500& my_octet_array_500() const;

    /*!
     * @brief This function returns a reference to member my_octet_array_500
     * @return Reference to member my_octet_array_500
     */
    eProsima_user_DllExport MyOctetArray500& my_octet_array_500();


    /*!
     * @brief This function copies the value in member my_array_struct
     * @param _my_array_struct New value to be copied in member my_array_struct
     */
    eProsima_user_DllExport void my_array_struct(
            const std::array<BasicStruct, 5>& _my_array_struct);

    /*!
     * @brief This function moves the value in member my_array_struct
     * @param _my_array_struct New value to be moved in member my_array_struct
     */
    eProsima_user_DllExport void my_array_struct(
            std::array<BasicStruct, 5>&& _my_array_struct);

    /*!
     * @brief This function returns a constant reference to member my_array_struct
     * @return Constant reference to member my_array_struct
     */
    eProsima_user_DllExport const std::array<BasicStruct, 5>& my_array_struct() const;

    /*!
     * @brief This function returns a reference to member my_array_struct
     * @return Reference to member my_array_struct
     */
    eProsima_user_DllExport std::array<BasicStruct, 5>& my_array_struct();


    /*!
     * @brief This function copies the value in member my_map_octet_short
     * @param _my_map_octet_short New value to be copied in member my_map_octet_short
     */
    eProsima_user_DllExport void my_map_octet_short(
            const std::map<uint8_t, int16_t>& _my_map_octet_short);

    /*!
     * @brief This function moves the value in member my_map_octet_short
     * @param _my_map_octet_short New value to be moved in member my_map_octet_short
     */
    eProsima_user_DllExport void my_map_octet_short(
            std::map<uint8_t, int16_t>&& _my_map_octet_short);

    /*!
     * @brief This function returns a constant reference to member my_map_octet_short
     * @return Constant reference to member my_map_octet_short
     */
    eProsima_user_DllExport const std::map<uint8_t, int16_t>& my_map_octet_short() const;

    /*!
     * @brief This function returns a reference to member my_map_octet_short
     * @return Reference to member my_map_octet_short
     */
    eProsima_user_DllExport std::map<uint8_t, int16_t>& my_map_octet_short();


    /*!
     * @brief This function copies the value in member my_map_long_struct
     * @param _my_map_long_struct New value to be copied in member my_map_long_struct
     */
    eProsima_user_DllExport void my_map_long_struct(
            const std::map<int32_t, BasicStruct>& _my_map_long_struct);

    /*!
     * @brief This function moves the value in member my_map_long_struct
     * @param _my_map_long_struct New value to be moved in member my_map_long_struct
     */
    eProsima_user_DllExport void my_map_long_struct(
            std::map<int32_t, BasicStruct>&& _my_map_long_struct);

    /*!
     * @brief This function returns a constant reference to member my_map_long_struct
     * @return Constant reference to member my_map_long_struct
     */
    eProsima_user_DllExport const std::map<int32_t, BasicStruct>& my_map_long_struct() const;

    /*!
     * @brief This function returns a reference to member my_map_long_struct
     * @return Reference to member my_map_long_struct
     */
    eProsima_user_DllExport std::map<int32_t, BasicStruct>& my_map_long_struct();


    /*!
     * @brief This function copies the value in member my_map_long_seq_octet
     * @param _my_map_long_seq_octet New value to be copied in member my_map_long_seq_octet
     */
    eProsima_user_DllExport void my_map_long_seq_octet(
            const std::map<int32_t, std::vector<std::vector<uint8_t>>>& _my_map_long_seq_octet);

    /*!
     * @brief This function moves the value in member my_map_long_seq_octet
     * @param _my_map_long_seq_octet New value to be moved in member my_map_long_seq_octet
     */
    eProsima_user_DllExport void my_map_long_seq_octet(
            std::map<int32_t, std::vector<std::vector<uint8_t>>>&& _my_map_long_seq_octet);

    /*!
     * @brief This function returns a constant reference to member my_map_long_seq_octet
     * @return Constant reference to member my_map_long_seq_octet
     */
    eProsima_user_DllExport const std::map<int32_t, std::vector<std::vector<uint8_t>>>& my_map_long_seq_octet() const;

    /*!
     * @brief This function returns a reference to member my_map_long_seq_octet
     * @return Reference to member my_map_long_seq_octet
     */
    eProsima_user_DllExport std::map<int32_t, std::vector<std::vector<uint8_t>>>& my_map_long_seq_octet();


    /*!
     * @brief This function copies the value in member my_map_long_octet_array_500
     * @param _my_map_long_octet_array_500 New value to be copied in member my_map_long_octet_array_500
     */
    eProsima_user_DllExport void my_map_long_octet_array_500(
            const std::map<int32_t, MyOctetArray500>& _my_map_long_octet_array_500);

    /*!
     * @brief This function moves the value in member my_map_long_octet_array_500
     * @param _my_map_long_octet_array_500 New value to be moved in member my_map_long_octet_array_500
     */
    eProsima_user_DllExport void my_map_long_octet_array_500(
            std::map<int32_t, MyOctetArray500>&& _my_map_long_octet_array_500);

    /*!
     * @brief This function returns a constant reference to member my_map_long_octet_array_500
     * @return Constant reference to member my_map_long_octet_array_500
     */
    eProsima_user_DllExport const std::map<int32_t, MyOctetArray500>& my_map_long_octet_array_500() const;

    /*!
     * @brief This function returns a reference to member my_map_long_octet_array_500
     * @return Reference to member my_map_long_octet_array_500
     */
    eProsima_user_DllExport std::map<int32_t, MyOctetArray500>& my_map_long_octet_array_500();


    /*!
     * @brief This function copies the value in member my_map_long_lol_type
     * @param _my_map_long_lol_type New value to be copied in member my_map_long_lol_type
     */
    eProsima_user_DllExport void my_map_long_lol_type(
            const std::map<int32_t, std::map<uint8_t, BSAlias5>>& _my_map_long_lol_type);

    /*!
     * @brief This function moves the value in member my_map_long_lol_type
     * @param _my_map_long_lol_type New value to be moved in member my_map_long_lol_type
     */
    eProsima_user_DllExport void my_map_long_lol_type(
            std::map<int32_t, std::map<uint8_t, BSAlias5>>&& _my_map_long_lol_type);

    /*!
     * @brief This function returns a constant reference to member my_map_long_lol_type
     * @return Constant reference to member my_map_long_lol_type
     */
    eProsima_user_DllExport const std::map<int32_t, std::map<uint8_t, BSAlias5>>& my_map_long_lol_type() const;

    /*!
     * @brief This function returns a reference to member my_map_long_lol_type
     * @return Reference to member my_map_long_lol_type
     */
    eProsima_user_DllExport std::map<int32_t, std::map<uint8_t, BSAlias5>>& my_map_long_lol_type();


    /*!
     * @brief This function copies the value in member my_small_string_8
     * @param _my_small_string_8 New value to be copied in member my_small_string_8
     */
    eProsima_user_DllExport void my_small_string_8(
            const eprosima::fastcdr::fixed_string<128>& _my_small_string_8);

    /*!
     * @brief This function moves the value in member my_small_string_8
     * @param _my_small_string_8 New value to be moved in member my_small_string_8
     */
    eProsima_user_DllExport void my_small_string_8(
            eprosima::fastcdr::fixed_string<128>&& _my_small_string_8);

    /*!
     * @brief This function returns a constant reference to member my_small_string_8
     * @return Constant reference to member my_small_string_8
     */
    eProsima_user_DllExport const eprosima::fastcdr::fixed_string<128>& my_small_string_8() const;

    /*!
     * @brief This function returns a reference to member my_small_string_8
     * @return Reference to member my_small_string_8
     */
    eProsima_user_DllExport eprosima::fastcdr::fixed_string<128>& my_small_string_8();


    /*!
     * @brief This function copies the value in member my_large_string_8
     * @param _my_large_string_8 New value to be copied in member my_large_string_8
     */
    eProsima_user_DllExport void my_large_string_8(
            const eprosima::fastcdr::fixed_string<500>& _my_large_string_8);

    /*!
     * @brief This function moves the value in member my_large_string_8
     * @param _my_large_string_8 New value to be moved in member my_large_string_8
     */
    eProsima_user_DllExport void my_large_string_8(
            eprosima::fastcdr::fixed_string<500>&& _my_large_string_8);

    /*!
     * @brief This function returns a constant reference to member my_large_string_8
     * @return Constant reference to member my_large_string_8
     */
    eProsima_user_DllExport const eprosima::fastcdr::fixed_string<500>& my_large_string_8() const;

    /*!
     * @brief This function returns a reference to member my_large_string_8
     * @return Reference to member my_large_string_8
     */
    eProsima_user_DllExport eprosima::fastcdr::fixed_string<500>& my_large_string_8();


    /*!
     * @brief This function copies the value in member my_array_string
     * @param _my_array_string New value to be copied in member my_array_string
     */
    eProsima_user_DllExport void my_array_string(
            const std::array<std::array<eprosima::fastcdr::fixed_string<75>, 5>, 5>& _my_array_string);

    /*!
     * @brief This function moves the value in member my_array_string
     * @param _my_array_string New value to be moved in member my_array_string
     */
    eProsima_user_DllExport void my_array_string(
            std::array<std::array<eprosima::fastcdr::fixed_string<75>, 5>, 5>&& _my_array_string);

    /*!
     * @brief This function returns a constant reference to member my_array_string
     * @return Constant reference to member my_array_string
     */
    eProsima_user_DllExport const std::array<std::array<eprosima::fastcdr::fixed_string<75>, 5>, 5>& my_array_string() const;

    /*!
     * @brief This function returns a reference to member my_array_string
     * @return Reference to member my_array_string
     */
    eProsima_user_DllExport std::array<std::array<eprosima::fastcdr::fixed_string<75>, 5>, 5>& my_array_string();


    /*!
     * @brief This function copies the value in member multi_alias_array_42
     * @param _multi_alias_array_42 New value to be copied in member multi_alias_array_42
     */
    eProsima_user_DllExport void multi_alias_array_42(
            const MA3& _multi_alias_array_42);

    /*!
     * @brief This function moves the value in member multi_alias_array_42
     * @param _multi_alias_array_42 New value to be moved in member multi_alias_array_42
     */
    eProsima_user_DllExport void multi_alias_array_42(
            MA3&& _multi_alias_array_42);

    /*!
     * @brief This function returns a constant reference to member multi_alias_array_42
     * @return Constant reference to member multi_alias_array_42
     */
    eProsima_user_DllExport const MA3& multi_alias_array_42() const;

    /*!
     * @brief This function returns a reference to member multi_alias_array_42
     * @return Reference to member multi_alias_array_42
     */
    eProsima_user_DllExport MA3& multi_alias_array_42();


    /*!
     * @brief This function copies the value in member my_array_arrays
     * @param _my_array_arrays New value to be copied in member my_array_arrays
     */
    eProsima_user_DllExport void my_array_arrays(
            const std::array<MyMiniArray, 5>& _my_array_arrays);

    /*!
     * @brief This function moves the value in member my_array_arrays
     * @param _my_array_arrays New value to be moved in member my_array_arrays
     */
    eProsima_user_DllExport void my_array_arrays(
            std::array<MyMiniArray, 5>&& _my_array_arrays);

    /*!
     * @brief This function returns a constant reference to member my_array_arrays
     * @return Constant reference to member my_array_arrays
     */
    eProsima_user_DllExport const std::array<MyMiniArray, 5>& my_array_arrays() const;

    /*!
     * @brief This function returns a reference to member my_array_arrays
     * @return Reference to member my_array_arrays
     */
    eProsima_user_DllExport std::array<MyMiniArray, 5>& my_array_arrays();


    /*!
     * @brief This function copies the value in member my_sequences_array
     * @param _my_sequences_array New value to be copied in member my_sequences_array
     */
    eProsima_user_DllExport void my_sequences_array(
            const std::array<MySequenceLong, 23>& _my_sequences_array);

    /*!
     * @brief This function moves the value in member my_sequences_array
     * @param _my_sequences_array New value to be moved in member my_sequences_array
     */
    eProsima_user_DllExport void my_sequences_array(
            std::array<MySequenceLong, 23>&& _my_sequences_array);

    /*!
     * @brief This function returns a constant reference to member my_sequences_array
     * @return Constant reference to member my_sequences_array
     */
    eProsima_user_DllExport const std::array<MySequenceLong, 23>& my_sequences_array() const;

    /*!
     * @brief This function returns a reference to member my_sequences_array
     * @return Reference to member my_sequences_array
     */
    eProsima_user_DllExport std::array<MySequenceLong, 23>& my_sequences_array();

private:

    uint8_t m_my_octet{0};
    BasicStruct m_my_basic_struct;
    MyAliasEnum m_my_alias_enum{::A};
    MyEnum m_my_enum{::A};
    std::vector<uint8_t> m_my_sequence_octet;
    std::vector<BasicStruct> m_my_sequence_struct;
    std::array<std::array<std::array<char, 4>, 5>, 500> m_my_array_octet{ {{ {{0}} }} };
    MyOctetArray500 m_my_octet_array_500{0};
    std::array<BasicStruct, 5> m_my_array_struct;
    std::map<uint8_t, int16_t> m_my_map_octet_short;
    std::map<int32_t, BasicStruct> m_my_map_long_struct;
    std::map<int32_t, std::vector<std::vector<uint8_t>>> m_my_map_long_seq_octet;
    std::map<int32_t, MyOctetArray500> m_my_map_long_octet_array_500;
    std::map<int32_t, std::map<uint8_t, BSAlias5>> m_my_map_long_lol_type;
    eprosima::fastcdr::fixed_string<128> m_my_small_string_8;
    eprosima::fastcdr::fixed_string<500> m_my_large_string_8;
    std::array<std::array<eprosima::fastcdr::fixed_string<75>, 5>, 5> m_my_array_string;
    MA3 m_multi_alias_array_42{::A};
    std::array<MyMiniArray, 5> m_my_array_arrays{ {{0}} };
    std::array<MySequenceLong, 23> m_my_sequences_array;

};


/*!
 * @brief This class represents the union MyUnion defined by the user in the IDL file.
 * @ingroup Test
 */
class MyUnion
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport MyUnion();

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~MyUnion();

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object MyUnion that will be copied.
     */
    eProsima_user_DllExport MyUnion(
            const MyUnion& x);

    /*!
     * @brief Move constructor.
     * @param x Reference to the object MyUnion that will be copied.
     */
    eProsima_user_DllExport MyUnion(
            MyUnion&& x) noexcept;

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object MyUnion that will be copied.
     */
    eProsima_user_DllExport MyUnion& operator =(
            const MyUnion& x);

    /*!
     * @brief Move assignment.
     * @param x Reference to the object MyUnion that will be copied.
     */
    eProsima_user_DllExport MyUnion& operator =(
            MyUnion&& x) noexcept;

    /*!
     * @brief Comparison operator.
     * @param x MyUnion object to compare.
     */
    eProsima_user_DllExport bool operator ==(
            const MyUnion& x) const;

    /*!
     * @brief Comparison operator.
     * @param x MyUnion object to compare.
     */
    eProsima_user_DllExport bool operator !=(
            const MyUnion& x) const;

    /*!
     * @brief This function sets the discriminator value.
     * @param __d New value for the discriminator.
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the new value doesn't correspond to the selected union member.
     */
    eProsima_user_DllExport void _d(
            MyEnum __d);

    /*!
     * @brief This function returns the value of the discriminator.
     * @return Value of the discriminator
     */
    eProsima_user_DllExport MyEnum _d() const;

    /*!
     * @brief This function returns a reference to the discriminator.
     * @return Reference to the discriminator.
     */
    eProsima_user_DllExport MyEnum& _d();

    /*!
     * @brief This function copies the value in member basic
     * @param _basic New value to be copied in member basic
     */
    eProsima_user_DllExport void basic(
            const BasicStruct& _basic);

    /*!
     * @brief This function moves the value in member basic
     * @param _basic New value to be moved in member basic
     */
    eProsima_user_DllExport void basic(
            BasicStruct&& _basic);

    /*!
     * @brief This function returns a constant reference to member basic
     * @return Constant reference to member basic
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport const BasicStruct& basic() const;

    /*!
     * @brief This function returns a reference to member basic
     * @return Reference to member basic
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport BasicStruct& basic();


    /*!
     * @brief This function copies the value in member complex
     * @param _complex New value to be copied in member complex
     */
    eProsima_user_DllExport void complex(
            const ComplexStruct& _complex);

    /*!
     * @brief This function moves the value in member complex
     * @param _complex New value to be moved in member complex
     */
    eProsima_user_DllExport void complex(
            ComplexStruct&& _complex);

    /*!
     * @brief This function returns a constant reference to member complex
     * @return Constant reference to member complex
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport const ComplexStruct& complex() const;

    /*!
     * @brief This function returns a reference to member complex
     * @return Reference to member complex
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport ComplexStruct& complex();

private:

    MyEnum m__d;

    BasicStruct m_basic;
    ComplexStruct m_complex;
};


/*!
 * @brief This class represents the union MyUnion2 defined by the user in the IDL file.
 * @ingroup Test
 */
class MyUnion2
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport MyUnion2();

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~MyUnion2();

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object MyUnion2 that will be copied.
     */
    eProsima_user_DllExport MyUnion2(
            const MyUnion2& x);

    /*!
     * @brief Move constructor.
     * @param x Reference to the object MyUnion2 that will be copied.
     */
    eProsima_user_DllExport MyUnion2(
            MyUnion2&& x) noexcept;

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object MyUnion2 that will be copied.
     */
    eProsima_user_DllExport MyUnion2& operator =(
            const MyUnion2& x);

    /*!
     * @brief Move assignment.
     * @param x Reference to the object MyUnion2 that will be copied.
     */
    eProsima_user_DllExport MyUnion2& operator =(
            MyUnion2&& x) noexcept;

    /*!
     * @brief Comparison operator.
     * @param x MyUnion2 object to compare.
     */
    eProsima_user_DllExport bool operator ==(
            const MyUnion2& x) const;

    /*!
     * @brief Comparison operator.
     * @param x MyUnion2 object to compare.
     */
    eProsima_user_DllExport bool operator !=(
            const MyUnion2& x) const;

    /*!
     * @brief This function sets the discriminator value.
     * @param __d New value for the discriminator.
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the new value doesn't correspond to the selected union member.
     */
    eProsima_user_DllExport void _d(
            uint8_t __d);

    /*!
     * @brief This function returns the value of the discriminator.
     * @return Value of the discriminator
     */
    eProsima_user_DllExport uint8_t _d() const;

    /*!
     * @brief This function returns a reference to the discriminator.
     * @return Reference to the discriminator.
     */
    eProsima_user_DllExport uint8_t& _d();

    /*!
     * @brief This function sets a value in member uno
     * @param _uno New value for member uno
     */
    eProsima_user_DllExport void uno(
            int32_t _uno);

    /*!
     * @brief This function returns the value of member uno
     * @return Value of member uno
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport int32_t uno() const;

    /*!
     * @brief This function returns a reference to member uno
     * @return Reference to member uno
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport int32_t& uno();


    /*!
     * @brief This function copies the value in member imString
     * @param _imString New value to be copied in member imString
     */
    eProsima_user_DllExport void imString(
            const std::string& _imString);

    /*!
     * @brief This function moves the value in member imString
     * @param _imString New value to be moved in member imString
     */
    eProsima_user_DllExport void imString(
            std::string&& _imString);

    /*!
     * @brief This function returns a constant reference to member imString
     * @return Constant reference to member imString
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport const std::string& imString() const;

    /*!
     * @brief This function returns a reference to member imString
     * @return Reference to member imString
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport std::string& imString();


    /*!
     * @brief This function sets a value in member tres
     * @param _tres New value for member tres
     */
    eProsima_user_DllExport void tres(
            int32_t _tres);

    /*!
     * @brief This function returns the value of member tres
     * @return Value of member tres
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport int32_t tres() const;

    /*!
     * @brief This function returns a reference to member tres
     * @return Reference to member tres
     * @exception eprosima::fastcdr::BadParamException This exception is thrown if the requested union member is not the current selection.
     */
    eProsima_user_DllExport int32_t& tres();

private:

    uint8_t m__d;

    int32_t m_uno{0};
    std::string m_imString;
    int32_t m_tres{0};
};


/*!
 * @brief This class represents the structure CompleteStruct defined by the user in the IDL file.
 * @ingroup Test
 */
class CompleteStruct
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport CompleteStruct();

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~CompleteStruct();

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object CompleteStruct that will be copied.
     */
    eProsima_user_DllExport CompleteStruct(
            const CompleteStruct& x);

    /*!
     * @brief Move constructor.
     * @param x Reference to the object CompleteStruct that will be copied.
     */
    eProsima_user_DllExport CompleteStruct(
            CompleteStruct&& x) noexcept;

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object CompleteStruct that will be copied.
     */
    eProsima_user_DllExport CompleteStruct& operator =(
            const CompleteStruct& x);

    /*!
     * @brief Move assignment.
     * @param x Reference to the object CompleteStruct that will be copied.
     */
    eProsima_user_DllExport CompleteStruct& operator =(
            CompleteStruct&& x) noexcept;

    /*!
     * @brief Comparison operator.
     * @param x CompleteStruct object to compare.
     */
    eProsima_user_DllExport bool operator ==(
            const CompleteStruct& x) const;

    /*!
     * @brief Comparison operator.
     * @param x CompleteStruct object to compare.
     */
    eProsima_user_DllExport bool operator !=(
            const CompleteStruct& x) const;

    /*!
     * @brief This function copies the value in member my_union
     * @param _my_union New value to be copied in member my_union
     */
    eProsima_user_DllExport void my_union(
            const MyUnion& _my_union);

    /*!
     * @brief This function moves the value in member my_union
     * @param _my_union New value to be moved in member my_union
     */
    eProsima_user_DllExport void my_union(
            MyUnion&& _my_union);

    /*!
     * @brief This function returns a constant reference to member my_union
     * @return Constant reference to member my_union
     */
    eProsima_user_DllExport const MyUnion& my_union() const;

    /*!
     * @brief This function returns a reference to member my_union
     * @return Reference to member my_union
     */
    eProsima_user_DllExport MyUnion& my_union();


    /*!
     * @brief This function copies the value in member my_union_2
     * @param _my_union_2 New value to be copied in member my_union_2
     */
    eProsima_user_DllExport void my_union_2(
            const MyUnion2& _my_union_2);

    /*!
     * @brief This function moves the value in member my_union_2
     * @param _my_union_2 New value to be moved in member my_union_2
     */
    eProsima_user_DllExport void my_union_2(
            MyUnion2&& _my_union_2);

    /*!
     * @brief This function returns a constant reference to member my_union_2
     * @return Constant reference to member my_union_2
     */
    eProsima_user_DllExport const MyUnion2& my_union_2() const;

    /*!
     * @brief This function returns a reference to member my_union_2
     * @return Reference to member my_union_2
     */
    eProsima_user_DllExport MyUnion2& my_union_2();

private:

    MyUnion m_my_union;
    MyUnion2 m_my_union_2;

};


/*!
 * @brief This class represents the structure KeyedStruct defined by the user in the IDL file.
 * @ingroup Test
 */
class KeyedStruct
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport KeyedStruct();

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~KeyedStruct();

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object KeyedStruct that will be copied.
     */
    eProsima_user_DllExport KeyedStruct(
            const KeyedStruct& x);

    /*!
     * @brief Move constructor.
     * @param x Reference to the object KeyedStruct that will be copied.
     */
    eProsima_user_DllExport KeyedStruct(
            KeyedStruct&& x) noexcept;

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object KeyedStruct that will be copied.
     */
    eProsima_user_DllExport KeyedStruct& operator =(
            const KeyedStruct& x);

    /*!
     * @brief Move assignment.
     * @param x Reference to the object KeyedStruct that will be copied.
     */
    eProsima_user_DllExport KeyedStruct& operator =(
            KeyedStruct&& x) noexcept;

    /*!
     * @brief Comparison operator.
     * @param x KeyedStruct object to compare.
     */
    eProsima_user_DllExport bool operator ==(
            const KeyedStruct& x) const;

    /*!
     * @brief Comparison operator.
     * @param x KeyedStruct object to compare.
     */
    eProsima_user_DllExport bool operator !=(
            const KeyedStruct& x) const;

    /*!
     * @brief This function sets a value in member key
     * @param _key New value for member key
     */
    eProsima_user_DllExport void key(
            uint8_t _key);

    /*!
     * @brief This function returns the value of member key
     * @return Value of member key
     */
    eProsima_user_DllExport uint8_t key() const;

    /*!
     * @brief This function returns a reference to member key
     * @return Reference to member key
     */
    eProsima_user_DllExport uint8_t& key();


    /*!
     * @brief This function copies the value in member basic
     * @param _basic New value to be copied in member basic
     */
    eProsima_user_DllExport void basic(
            const BasicStruct& _basic);

    /*!
     * @brief This function moves the value in member basic
     * @param _basic New value to be moved in member basic
     */
    eProsima_user_DllExport void basic(
            BasicStruct&& _basic);

    /*!
     * @brief This function returns a constant reference to member basic
     * @return Constant reference to member basic
     */
    eProsima_user_DllExport const BasicStruct& basic() const;

    /*!
     * @brief This function returns a reference to member basic
     * @return Reference to member basic
     */
    eProsima_user_DllExport BasicStruct& basic();

private:

    uint8_t m_key{0};
    BasicStruct m_basic;

};

#endif // _FAST_DDS_GENERATED_TEST_H_



#endif // FASTCDR_VERSION_MAJOR > 1
